import type { Router } from 'vue-router'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { useOidcStore } from '@/stores/oidc'
import { usePermissStore } from '@/stores/permiss'

export function setupRouterGuard(router: Router) {
  startLoading(router)
  setPermissionGuard(router)
  endLoading(router)
}

function startLoading(router: Router) {
  router.beforeEach(() => {
    NProgress.start()
  })
}

function endLoading(router: Router) {
  router.afterEach(() => {
    NProgress.done()
  })
}

function setPermissionGuard(router: Router) {
  router.beforeEach((to, from, next) => {
    const role = localStorage.getItem('vuems_name')
    const permiss = usePermissStore()
    const user = useOidcStore()

    // 处理用户刷新页面，重新加载用户登录信息
    user.trySetUserInfoFromCache()

    // 如果页面不需要认证，直接路由
    if (to.meta.noAuth === true) {
      next()
    } else {
      // 判断是否登录
      if (user.isLogin) {
        // 如果路由的 permiss 为 string 同时当前用户不满足权限
        if (typeof to.meta.permiss == 'string' && !permiss.key.includes(to.meta.permiss)) {
          // 如果没有权限，则进入403
          next('/403')
        } else {
          next()
        }
      } else {
        next('/403')
      }
    }

    // // 如果为设置角色名称，同时需要认证
    // if (!role && to.meta.noAuth !== true) {
    //     next('/login');
    // } else if (typeof to.meta.permiss == 'string' && !permiss.key.includes(to.meta.permiss)) {
    //     // 如果没有权限，则进入403
    //     next('/403');
    // } else {
    //     next();
    // }
  })
}
